#ifndef _NE_DEFINE_H_
#define _NE_DEFINE_H_

namespace ne
{
    // NE_PLATFORM
    #define NE_PLATFORM_LINUX          1
    #define NE_PLATFORM_WINDOWS        2
    #define NE_PLATFORM_MACOSX         3
    #define NE_PLATFORM_OS2            4

    // NE_COMPILER
    #define NE_COMPILER_GCC            1
    #define NE_COMPILER_MSVC           2
    #if defined(_MSC_VER)
        #define NE_COMPILER NE_COMPILER_MSVC
    #else
        #define NE_COMPILER NE_COMPILER_GCC
    #endif

    // NE_ENDIAN
    #define NE_ENDIAN_LITTLE           1
    #define NE_ENDIAN_BIG              2
    #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
        #define NE_ENDIAN NE_ENDIAN_LITTLE
    #else
        #define NE_ENDIAN NE_ENDIAN_BIG
    #endif

    // NE_ARCHITECTURE
    #define NE_ARCHITECTURE_X86         1
    #define NE_ARCHITECTURE_X64         2
    #if defined(__LP64) || defined(__LP64__)
        #define NE_ARCHITECTURE NE_ARCHITECTURE_X64
    #else
        #define NE_ARCHITECTURE NE_ARCHITECTURE_X86
    #endif

    // NE_RENDER_SYSTEM
    #define NE_RENDER_SYSTEM_OPENGL    1
    #define NE_RENDER_SYSTEM_OPENGLES  2

    // NE_PRECISION
    #define NE_PRECISION_FLOAT         1
    #define NE_PRECISION_DOUBLE        2

    // NE_USAGE
    #define NE_USAGE_LIB               1
    // Only use for Windows
    #define NE_USAGE_DYNAMIC_LIB       2
    #define NE_USAGE_BUILD_DYNAMIC_LIB 3

    // Nuclear Engine name
    #define NE_NAME                    "Nuclear Engine"
    #define NE_AUTHOR                  "Rockie X.Lee"

    // Define Nuclear Engine version
    #define NE_VERSION_MAJOR           0
    #define NE_VERSION_MINOR           1
    #define NE_VERSION_PATCH           0
    #define NE_VERSION_SUFFIX          "Alpha"
    #define NE_VERSION_NAME            "Origin"

    #define NE_VERSION ((NE_VERSION_MAJOR << 16) | (NE_VERSION_MINOR << 8) | NE_VERSION_PATCH)
    #define NE_VERSION_STRING          NE_VERSION_NAME".0.1.0."NE_VERSION_SUFFIX
}

#endif
